/*
在股票交易中，股民可以通过各种手段将委托送到股票交易所。每个委托主要说明了股民身份、买卖的股票、价格和数量。交易的规则是价格优先、时间优先，即出的价格最高的人先买，出的价格最低的人先卖。两个委托只有价格合适时才能成交，未成交的委托按价格顺序放在撮合队列中。每个股票有两个撮合队列：买队列和卖队列。只有当买委托的价格高于等于卖委托的价格，两个委托才可以成交，成交价取两个委托价格的平均值，成交量取两个委托数量的最小值。委托可以是完全成交或部分成交，部分成交的委托保留在撮合队列中继续交易。试利用单链表作为存放委托的数据结构（撮合队列），编写一模拟股票交易的程序，该程序有以下几个功能：

1. 委托申请：

输入：每个委托包括四个数据项，股票编码（ 4 位数字）、价格（浮点数）、数量（整数）、买 / 卖（ B/S ）

输出： a. 程序为每个委托产生一个唯一的序号（ %04d ），该序号从 1 开始； b. 每笔成交包括：成交价格（ %6.1f ）、成交量（ %4d ）、新的委托序号（ %04d ）、匹配的委托序号（ %04d ）。

2. 查询未成交的委托：

输入：股票编码

输出：按撮合队列中委托的顺序，分别输出该股票未成交的委托，每个输出的委托包括：委托序号（ %04d ）、 股票编码 （ %04d ） 、 价格（ %6.1f ）、数量（ %4d ）、 B/S （买 / 卖 )

3. 委托撤消：

输入：要撤消的委托号。

输出：若成功，显示该委托信息，其中委托包括数据项：委托序号、股票编码、价格、数量、 B/S （买 / 卖 ) ；否则显示“ not found ”失败信息。

委托输入格式 ： 1 股票编码 价格 数量 买卖

查询输入格式 ： 2 股票编码

委托撤销 ： .3 委托号

退出： 0

例： （下面的黑斜体为输入,    输入输出格式参见测试用例）

1 0038 20 1000 b

orderid: 0001

1 0278 18 2000 s

orderid: 0002

1 0003 8 5000 b

orderid: 0003

1 0003 12 1000 b

orderid: 0004

1 0003 10 500 b

orderid: 0005

1 0003 11 9000 b

orderid: 0006

1 0003 18 1000 s

orderid: 0007

2 0003

buy orders:
orderid: 0004, stockid:0003, price: 12.0, quantity: 1000, b/s: b
orderid: 0006, stockid:0003, price: 11.0, quantity: 9000, b/s: b
orderid: 0005, stockid:0003, price: 10.0, quantity: 500, b/s: b
orderid: 0003, stockid:0003, price: 8.0, quantity: 5000, b/s: b
sell orders:
orderid: 0007, stockid:0003, price: 18.0, quantity: 1000, b/s: s

3 0006

deleted order:orderid: 0006, stockid:0003, price: 11.0, quantity: 9000, b/s: b

3 0197

not found

2 0003

buy orders:
orderid: 0004, stockid:0003, price: 12.0, quantity: 1000, b/s: b
orderid: 0005, stockid:0003, price: 10.0, quantity: 500, b/s: b
orderid: 0003, stockid:0003, price: 8.0, quantity: 5000, b/s: b
sell orders:
orderid: 0007, stockid:0003, price: 18.0, quantity: 1000, b/s: s

1 0003 9 1200 s

orderid: 0008
deal--price: 10.5 quantity:1000 sellorder:0008 buyorder:0004
deal--price: 9.5 quantity: 200 sellorder:0008 buyorder:0005

2 0003

buy orders:
orderid: 0005, stockid:0003, price: 10.0, quantity: 300, b/s: b
orderid: 0003, stockid:0003, price: 8.0, quantity: 5000, b/s: b
sell orders:
orderid: 0007, stockid:0003, price: 18.0, quantity: 1000, b/s: s

注意：
1、当查询未成交委托时，如果没有委托，仍要输出“buy orders:”或“sell orders: ”。
2、输入的委托 price>=0。
3、输入的委托 quantity>=0，当接受一个新的委托时，首先根据委托的股票编码和价格与现有队列中的委托进行撮合，若撮合后有剩余的数量没有得到满足（即quantity>0），则将新委托插入到相应队列中。
*/

/*
测试用例1:
输入：
1 9990 8 1000 s↵
1 0001 9 500 s↵
1 0001 8 200 s↵
1 0001 12 1000 s↵
1 0001 10 1000 b↵
2 0001↵
0↵
输出：
orderid: 0001↵
orderid: 0002↵
orderid: 0003↵
orderid: 0004↵
orderid: 0005↵
deal--price:   9.0  quantity: 200  buyorder:0005  sellorder:0003↵
deal--price:   9.5  quantity: 500  buyorder:0005  sellorder:0002↵
buy orders:↵
orderid: 0005, stockid:0001, price:   10.0, quantity:  300, b/s: b↵
sell orders:↵
orderid: 0004, stockid:0001, price:   12.0, quantity: 1000, b/s: s↵

测试用例2:
输入：
1 2222 10 1000 b↵
1 2222 9 2000 b↵
1 2222 10 2000 b↵
2 2222↵
3 0003↵
1 2222 9 5000 s↵
0↵
输出：
orderid: 0001↵
orderid: 0002↵
orderid: 0003↵
buy orders:↵
orderid: 0001, stockid:2222, price:   10.0, quantity: 1000, b/s: b↵
orderid: 0003, stockid:2222, price:   10.0, quantity: 2000, b/s: b↵
orderid: 0002, stockid:2222, price:    9.0, quantity: 2000, b/s: b↵
sell orders:↵
deleted order:orderid: 0003, stockid:2222, price:   10.0, quantity: 2000, b/s: b↵
orderid: 0004↵
deal--price:   9.5  quantity:1000  sellorder:0004  buyorder:0001↵
deal--price:   9.0  quantity:2000  sellorder:0004  buyorder:0002↵

测试用例3:
输入：
1 0789 79 671 s↵
1 0799 27 535 b↵
1 0809 75 631 b↵
1 0822 56 495 s↵
1 0831 4 591 b↵
1 0841 53 688 b↵
1 0854 33 552 s↵
1 0864 81 648 b↵
1 0547 30 512 b↵
1 0557 78 608 s↵
1 0570 59 472 b↵
1 0580 7 569 b↵
1 0590 55 433 s↵
1 0600 36 529 b↵
1 0613 84 393 s↵
1 0622 33 489 s↵
1 0632 13 585 b↵
1 0642 61 450 s↵
1 0655 10 546 s↵
1 0665 90 410 b↵
1 0675 39 506 s↵
1 0688 87 370 s↵
1 0698 67 467 b↵
1 0707 16 331 s↵
1 0717 64 427 s↵
1 0730 45 291 b↵
1 0740 93 387 s↵
1 0750 41 483 s↵
1 0760 22 348 b↵
1 0773 70 444 s↵
1 0782 19 308 s↵
1 0792 99 404 b↵
1 0802 48 268 s↵
1 0815 96 364 b↵
1 0825 76 229 b↵
1 0835 25 325 s↵
1 0845 73 189 b↵
1 0858 54 285 b↵
1 0867 2 381 s↵
1 0551 50 245 b↵
1 0564 31 342 b↵
1 0574 79 206 s↵
1 0583 28 302 b↵
1 0593 8 166 b↵
1 0606 56 262 s↵
1 0616 5 126 b↵
1 0626 85 223 b↵
1 0636 34 87 s↵
1 0649 82 183 b↵
1 0658 62 279 s↵
1 0668 11 143 s↵
1 0678 59 239 b↵
1 0691 40 104 s↵
1 0701 88 200 s↵
1 0711 36 64 b↵
1 0724 17 160 s↵
1 0734 65 24 s↵
1 0743 14 121 b↵
1 0753 94 985 s↵
1 0766 42 81 s↵
1 0776 91 177↵
输出：
orderid: 0001↵
orderid: 0002↵
orderid: 0003↵
orderid: 0004↵
orderid: 0005↵
orderid: 0006↵
orderid: 0007↵
orderid: 0008↵
orderid: 0009↵
orderid: 0010↵
orderid: 0011↵
orderid: 0012↵
orderid: 0013↵
orderid: 0014↵
orderid: 0015↵
orderid: 0016↵
orderid: 0017↵
orderid: 0018↵
orderid: 0019↵
orderid: 0020↵
orderid: 0021↵
orderid: 0022↵
orderid: 0023↵
orderid: 0024↵
orderid: 0025↵
orderid: 0026↵
orderid: 0027↵
orderid: 0028↵
orderid: 0029↵
orderid: 0030↵
orderid: 0031↵
orderid: 0032↵
orderid: 0033↵
orderid: 0034↵
orderid: 0035↵
orderid: 0036↵
orderid: 0037↵
orderid: 0038↵
orderid: 0039↵
orderid: 0040↵
orderid: 0041↵
orderid: 0042↵
orderid: 0043↵
orderid: 0044↵
orderid: 0045↵
orderid: 0046↵
orderid: 0047↵
orderid: 0048↵
orderid: 0049↵
orderid: 0050↵
orderid: 0051↵
orderid: 0052↵
orderid: 0053↵
orderid: 0054↵
orderid: 0055↵
orderid: 0056↵
orderid: 0057↵
orderid: 0058↵
orderid: 0059↵
orderid: 0060↵
orderid: 0061↵
orderid: 0062↵
orderid: 0063↵
orderid: 0064↵
orderid: 0065↵
orderid: 0066↵
orderid: 0067↵
orderid: 0068↵
orde↵
*/